using Chip8.Core.Bus;

namespace Chip8.Core.Processor
{
	internal interface ICPU : IDevice
	{
		ushort PC { get; set; }
		ushort I { get; set; }
		byte[] V { get; }
		Stack Stack { get; }
		//TODO: check if these are needed at all (except for the Carry)
		#region Register aliases
		byte V0 { get; set; }
		byte V1 { get; set; }
		byte V2 { get; set; }
		byte V3 { get; set; }
		byte V4 { get; set; }
		byte V5 { get; set; }
		byte V6 { get; set; }
		byte V7 { get; set; }
		byte V8 { get; set; }
		byte V9 { get; set; }
		byte VA { get; set; }
		byte VB { get; set; }
		byte VC { get; set; }
		byte VD { get; set; }
		byte VE { get; set; }
		byte VF { get; set; }
		byte Carry { get; set; }
		#endregion

		byte DT { get; set; }
		byte ST { get; set; }

		int Rnd(int maxValue);
	}
}